package com.jrx.anytxn.transaction.service;

import com.jrx.anytxn.transaction.bean.DebtBean;
import com.jrx.anytxn.transaction.entity.AmAccountMainInfo;
import com.jrx.anytxn.transaction.entity.AmLoanAccountInfo;
import com.jrx.anytxn.transaction.entity.AmRepaymentPlanInfo;

import java.util.Date;
import java.util.List;

/**
 * 欠款计算接口
 *
 * @program: anytxn-cf-transaction
 * @description:
 * @author: xiaoyu.jing
 * @date: 2019-10-23 20:15
 **/
public interface IDebtCalculationService {
    /**
     * 根据交易账户获取欠款
     *
     * @param amAccountMainInfoList 账户列表
     * @return 欠款信息
     * @author jing.xiaoyu
     */
    DebtBean calculationDebt(List<AmAccountMainInfo> amAccountMainInfoList);

    /**
     * 根据订单查询欠款
     *
     * @param loanAccountInfo 订单
     * @param businessDate    当前业务日期
     * @param isPlanOverDue   按订单还款计划是否逾期查询(与isplanDue必须有一个为空)
     * @param isPlanDue       按订单还款计划是否到期查询
     * @param isPlanCast      按订单还款计划是否抛账
     * @param haveNotCastIntr 是否包含未抛账利息
     * @return 欠款信息
     */
    DebtBean getBalance(AmLoanAccountInfo loanAccountInfo, Date businessDate, Boolean isPlanOverDue,
                        Boolean isPlanDue, Boolean isPlanCast, Boolean haveNotCastIntr);

    /**
     * 根据订单和还款计划查询欠款
     *
     * @param loanAccountInfo 订单
     * @param loanPlanList    还款计划
     * @param businessDate    当前业务日期
     * @param isPlanOverDue   按订单还款计划是否逾期查询(与isplanDue必须有一个为空)
     * @param isPlanDue       按订单还款计划是否到期查询
     * @param isPlanCast      按订单还款计划是否抛账
     * @param haveNotCastIntr 是否包含未抛账利息
     * @return 欠款信息
     */
    DebtBean getBalance(AmLoanAccountInfo loanAccountInfo, List<AmRepaymentPlanInfo> loanPlanList, Date businessDate, Boolean isPlanOverDue,
                        Boolean isPlanDue, Boolean isPlanCast, Boolean haveNotCastIntr);

    /**
     * 查询单期还款计划的欠款
     * @param planInfo 还款计划
     * @return 欠款信息
     */
    DebtBean getBalance(AmRepaymentPlanInfo planInfo);
}
